package com.kaifamiao.jdbc.core;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

/**
 * 目标: 测试 executeQuery "执行"DQL语句的返回结果
 * 1、ResultSet不是Set集合，与java.util.Set无关
 * 2、ResultSet中包含的行和列都是由查询语句决定的
 * 3、ResultSet与Connection、Statement一样也需要关闭
 */
public class ResultHandling3 {

    public static void main(String[] args) throws SQLException {
        DbUtil du = DbUtil.getInstance();
        du.load();
        Connection conn = du.connect();
        Statement stmt = du.create( conn );

        String select = "SELECT empno, ename, job, sal salary FROM emp WHERE deptno IS NOT NULL";
        ResultSet rs = stmt.executeQuery( select );

        List<Employee> emps = new ArrayList<>();

        // 通过调用 结果集对象 的 next 方法让 指针 逐行下移
        while( rs.next() ){
            // 根据 列名 获取 当前行 指定列的值
            int id = rs.getInt( "empno" );
            // 根据 列别名 获取 当前行指定列的值
            double salary = rs.getDouble( "salary" );
            // 根据 列索引 获取 当前行 指定列的值
            String name = rs.getString( 2 ); // ename
            String job = rs.getString( 3 ); // job
            // 根据获取到的值创建一个Employee实例
            Employee e = new Employee( id, name, job, salary );
            // 将 Employee实例添加到集合中
            emps.add( e );
        }

        du.release( rs );
        du.release( stmt );
        du.release( conn );

        System.out.println( emps.size() );

        for ( int i = 0 ; i < emps.size(); i++ ) {
            Employee e = emps.get( i );
            System.out.println( e );
        }

    }

}
